#!/usr/bin/env python
#-------------------------------python-------------------07gattopo.py--#
#                                                                      #
#                    Un gatto che insegue un topo                      #
#                                                                      #
#--Daniele Zambelli----------------------------------------------2005--#

from random import randrange
from pyturtle import Turtle

VTOPO=.6
VGATTO=.6
 
# dirto
class Topo(Turtle):
  """Classe che simula il comportamento di un topo."""
  def __init__(self):
    Turtle.__init__(self)
    piano=self._plane
    self.up()
    self.setpos((-280, 180))
    self.write("inseguimento in base alla vista")
    self.setpos((randrange(120)-60, randrange(80)-40))
    self.down()

  def scappa(self, da):
    """Fa muovere il topo di un passo
    cercando di scappare da da"""
    dir_gatto=self.dirto(da.getpos())
    if 170<dir_gatto<190 or -10<dir_gatto<10:
      self.right(randrange(180)-90)
#      print dir_gatto
    else:
      self.left(randrange(20)-10)
    self.forward(VTOPO)

class Gatto(Turtle):
  """Classe che simula il comportamento di un gatto"""
  def __init__(self, piano):
    Turtle.__init__(self, piano)
    self.setcolor("gray")
    self.setwidth(3)

  def insegui(self, chi):
    """Fa muovere il gatto di un passo come se inseguisse chi.
    restituisce 0 se ha raggiunto chi"""
    if self.distance(chi.getpos())<3:
      self.setpos(chi.getpos())
      self.setcolor("red")
      self.write("   Buono questo topo!!!")
      return 0
    dir_topo=self.dirto(chi.getpos())
    if dir_topo<180: self.left(randrange(5))
    else:            self.right(randrange(5))
    self.forward(VGATTO)
    return 1

def insegui():
  """Simula l'inseguimento tra un gatto e un topo"""
  topo=Topo()
  gatto=Gatto(topo.getplane())
  while gatto.insegui(topo): topo.scappa(gatto)


insegui()

